package w83b.w83bOperacionesPaso.w83bComunicaciones;

import java.util.HashMap;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import w83b.w83bBeans.W83bComunicacionesBean;
import w83b.w83bBeans.W83bPlantillasBean;
import w83b.w83bBeans.W83bUsuarioXLNetsBean;
import w83b.w83bUtilidades.W83bUtilidadesComunes;
import w83b.w83bUtilidades.W83bUtilidadesRTF;
import w83b.w83bUtilidadesComunes.W83bClsConstantes;
import w83b.w83bUtilidadesComunes.W83bClsTrazas;
import w83b.w83bUtilidadesComunes.W83bDateUtil;
import w83b.w83bUtilidadesComunes.W83bUtilidades;
import w83b.w83bUtilidadesLibroRegistro.W83bLibroRegistro;
import w83b.w83bUtilidadesLibroRegistro.W83bLibroRegistroException;
import es.ejie.frmk.infraestructura.internacionalizacion.Q70GestorMensajesi18n;
import es.ejie.frmk.presentacion.operacion.paso.Q70ActionPasoOP;
import es.ejie.frmk.presentacion.sesiondatos.Q70ContextoEJIE;

public class W83bGenerarRtfOficRequeAction extends Q70ActionPasoOP{


	
	protected void processOP(Q70ContextoEJIE contexto, ActionErrors errores, ActionMapping mapping,
			ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		
	}

	protected ActionForward processForward(Q70ContextoEJIE contexto, ActionErrors errors, ActionMapping mapping, 
			ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		//String strRutaRtf ="";// Q70ListenerUtils.getApplicationProperty("RUTA_PLANTILLAS_RTF")+"plantillaCertNumDelCentSind.rtf";
		
	    List lista=(List)contexto.get("w83bResultadoBean");
	   
		String idioma=(String)contexto.get(W83bClsConstantes.CONSTANTE_CONTEXTO_IDIOMA);
        HashMap datosDelDep=  W83bUtilidadesComunes.obtenerTitulosDelegacionDepartamento((W83bUsuarioXLNetsBean)contexto.get(W83bClsConstantes.CONSTANTE_CONTEXTO_USUARIO),idioma);  	
		//strRutaRtf = Q70ListenerUtils.getApplicationProperty("RUTA_PLANTILLAS_RTF")+"plantillaOficioReque.rtf";

		HashMap mapaPar = new HashMap();
		HashMap mapaParGeneral = new HashMap();
		mapaParGeneral.put("<<DEPEUS>>",((StringBuffer)datosDelDep.get("tituloDepEu")).toString());
		mapaParGeneral.put("<<DEPCAS>>",((StringBuffer)datosDelDep.get("tituloDepEs")).toString());
		mapaParGeneral.put("<<DELEUS>>",((StringBuffer)datosDelDep.get("tituloDelelegacionEu")).toString());
		mapaParGeneral.put("<<DELCAS>>",((StringBuffer)datosDelDep.get("tituloDelelegacionEs")).toString());
		mapaParGeneral.put("<<DIRDELEGACION>>",(String)datosDelDep.get("dirdelegacion"));
		
		//CharSequence content=W83bUtilidadesRTF.leerTodoFichero(strRutaRtf);
		HashMap mapaPlantillas = (HashMap)contexto.get("w83bPlantillasMap");
		byte[] plantilla = ((W83bPlantillasBean)mapaPlantillas.get(W83bClsConstantes.OFICINA_REQUERIMIENTO.toUpperCase())).getFichero();
		
		CharSequence content=W83bUtilidadesRTF.leerTodoFichero(plantilla);
		String contenido=content.toString();
		
		StringBuffer contenidoBuffer=new StringBuffer(contenido);
		int ifooter=contenido.lastIndexOf("footer");
		String delantefooter=contenido.substring(ifooter,contenido.length());
		int ifooterLlave=delantefooter.indexOf("}")+2;
		int finDelantelimpio=ifooter+ifooterLlave;
		int z=contenido.lastIndexOf("page")+6;
		StringBuffer parteDelanteLimpia=new StringBuffer(contenido.substring(0,finDelantelimpio));
		String parteAtrasLimpia=contenido.substring(z,contenido.length());
		contenidoBuffer=new StringBuffer(contenido.substring(finDelantelimpio,z));
		parteDelanteLimpia=W83bUtilidadesRTF.sustituirCadenaCaracteresString(parteDelanteLimpia, mapaParGeneral);
		StringBuffer datos=new StringBuffer();
		datos.append(parteDelanteLimpia);
		
		StringBuffer elemento=new StringBuffer();
		for(int i=0;i<lista.size()-1;i++)
		{
			W83bComunicacionesBean comunic=(W83bComunicacionesBean)lista.get(i);
			StringBuffer observaciones=new StringBuffer(W83bClsConstantes.CUARENTA);//NOPMD
			observaciones.append(Q70GestorMensajesi18n.getSingleton().getMessage("w83bcomun","comun.comunicaciones.ofireqacta",comunic.getIdioma(),null)).append(" ");
			observaciones.append(comunic.getTerrit()+"/"+comunic.getAnoacta()+"/"+W83bUtilidades.rellenarCaracter(comunic.getNacta(), "0", 6, true));
				
			long milisegundos = System.currentTimeMillis();
			String [] resul = null;
			try{
				resul=W83bLibroRegistro.getAltaRegistro(true, comunic.getUsuarioBean().getModeloSal(), "S", "E", Q70GestorMensajesi18n.getSingleton().getMessage("w83bcomun","comun.informes.direccionTrabajo_es",comunic.getIdioma(),null), comunic.getTerrit(), "" ,observaciones.toString(), comunic.getUsuarioBean());
			}catch(W83bLibroRegistroException e){
					W83bUtilidadesComunes.anyadirMensajeErrorAplicacion(errors, "error.mensaje.comunicacionesMalLibroRegistro", (String)contexto.get(W83bClsConstantes.CONSTANTE_CONTEXTO_IDIOMA));
				  return mapping.findForward("error"); 
			}
			W83bClsTrazas.trazaError(comunic.getUsuarioBean(), "tiempo antes de query="+(System.currentTimeMillis()- milisegundos), null);
			comunic.setNumsalida(resul[0]);
			comunic.setFechaaregistro(resul[1]);
			String sindicatos=comunic.getDescsindicato();
			String[] sind=sindicatos.split("\\?");
			for (int x=0;x<sind.length;x++){
				mapaPar.put("<<NUMSALIDA>>",W83bUtilidadesRTF.ponerBlancoANulo(comunic.getNumsalida()));
				String[] s=sind[x].toString().split("\\|");
				mapaPar.put("<<DEPEUS>>",((StringBuffer)datosDelDep.get("tituloDepEu")).toString());
				mapaPar.put("<<DEPCAS>>",((StringBuffer)datosDelDep.get("tituloDepEs")).toString());
				mapaPar.put("<<DELEUS>>",((StringBuffer)datosDelDep.get("tituloDelelegacionEu")).toString());
				mapaPar.put("<<DELCAS>>",((StringBuffer)datosDelDep.get("tituloDelelegacionEs")).toString());
				mapaPar.put("<<DIRDELEGACION>>",(String)datosDelDep.get("dirdelegacion"));
				List fa;
				if (W83bClsConstantes.CONSTANTE_CASTELLANO.equals(idioma)){
					fa=W83bDateUtil.getInstance().separarDiaMesAnyo(comunic.getFechacomunicacion(),W83bClsConstantes.CONSTANTE_CASTELLANO);
				}
				else{
					fa=W83bDateUtil.getInstance().separarDiaMesAnyo(comunic.getFechacomunicacion(),W83bClsConstantes.CONSTANTE_EUSKARA);
				}
				mapaPar.put("<<FECHA>>",W83bDateUtil.getInstance().devolverLiteralfechamin(Integer.parseInt((String)fa.get(0)),Integer.parseInt((String)fa.get(1)),Integer.parseInt((String)fa.get(2)),idioma).toString());
				mapaPar.put("<<RAZON>>",comunic.getRazon());
				if (W83bClsConstantes.CONSTANTE_NO_VALIDADA.equals(comunic.getCentroSel())||StringUtils.isEmpty(comunic.getDirorig())){
					mapaPar.put("<<DOMIC>>",W83bUtilidadesRTF.ponerBlancoANulo(comunic.getDomicilio()));
				}
				else{
					mapaPar.put("<<DOMIC>>",W83bUtilidadesRTF.ponerBlancoANulo(comunic.getDirorig()));
				}
				if (W83bClsConstantes.CONSTANTE_NO_VALIDADA.equals(comunic.getCentroSel())||StringUtils.isEmpty(comunic.getCporig())){
					mapaPar.put("<<CPOST>>",comunic.getCodigopostal());
				}
				else{
					mapaPar.put("<<CPOST>>",comunic.getCporig());
				}
				
				mapaPar.put("<<LOCAL>>",W83bUtilidadesRTF.ponerBlancoANulo(comunic.getMunicipio()).toUpperCase());
				mapaPar.put("<<PROV>>",comunic.getProvincia().toUpperCase());
				mapaPar.put("<<EXPDTE>>","Nš Acta: "+comunic.getTerrit()+"/"+comunic.getAnoacta()+"/"+W83bUtilidades.rellenarCaracter(comunic.getNacta(), "0", 6, true));
				
				mapaPar.put("<<LOCALID>>",(String)datosDelDep.get("localiddelegacion"));
				mapaPar.put("<<FECCAS>>"," a "+W83bDateUtil.getInstance().devolverLiteralfechaentera(Integer.parseInt((String)fa.get(0)),Integer.parseInt((String)fa.get(1)),Integer.parseInt((String)fa.get(2)),W83bClsConstantes.CONSTANTE_CASTELLANO).toString());
				mapaPar.put("<<FECUSK>>",W83bDateUtil.getInstance().devolverLiteralfechaentera(Integer.parseInt((String)fa.get(0)),Integer.parseInt((String)fa.get(1)),Integer.parseInt((String)fa.get(2)),W83bClsConstantes.CONSTANTE_EUSKARA).toString());
				mapaPar.put("<<LINEAORDEN>>","");
				mapaPar.put("<<DELEGADO>>",W83bUtilidadesRTF.ponerBlancoANulo(comunic.getNombrefirmante()));
				mapaPar.put("<<CARGO>>",comunic.getDescfirmante().toUpperCase());
				mapaPar.put("<<CARGOEU>>",comunic.getDescfirmanteeu().toUpperCase());
				mapaPar.put("<<LINEARESPONSABLE>>","");
				if (s.length>0){
					mapaPar.put("<<SINDICATO>>",s[1]+"/ \\\\par "+s[2]);
				}
				else{
					mapaPar.put("<<SINDICATO>>","");
				}
				elemento=W83bUtilidadesRTF.sustituirCadenaCaracteresString(contenidoBuffer, mapaPar);
				
				if (i==lista.size()-2&&x==sind.length-1){
					int j=elemento.lastIndexOf("page");
					String delante=elemento.substring(0,j);
					String detras=elemento.substring(j,elemento.length());
					String delanteL=delante.substring(0, delante.lastIndexOf("{"));
					String detrasL=detras.substring( detras.indexOf("}")+1,detras.length());
					elemento=new StringBuffer(delanteL.concat(detrasL));//NOPMD
				}
				
				datos.append(elemento);
			}
		}
		datos.append(parteAtrasLimpia);
		response.setContentType("application/msword");
	    response.setContentLength(datos.toString().getBytes().length);
	    response.setHeader("Content-disposition","attachment;filename=OficioRequerimiento.rtf");
	    response.getOutputStream().write(datos.toString().getBytes());
	    response.getOutputStream().flush();

		
		return null;
	}
		
}

